package pe.gob.foncodes.spp.bs.services;

import java.io.Serializable;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import pe.gob.foncodes.sgp.bs.domain.SubTipoProyecto;
import pe.gob.foncodes.sgp.bs.domain.TipoProyecto;
import pe.gob.foncodes.sgp.bs.services.SubTipoProyectoServices;
import pe.gob.foncodes.sgp.bs.services.TipoProyectoServices;
import pe.gob.foncodes.spp.bs.domain.Entidad;
import pe.gob.foncodes.spp.bs.domain.Focalizacion;
import pe.gob.foncodes.spp.bs.domain.Indicador;
import pe.gob.foncodes.spp.bs.domain.Meta;
import pe.gob.foncodes.spp.bs.domain.MetaPeriodo;
import pe.gob.foncodes.spp.bs.domain.Objetivo;
import pe.gob.foncodes.spp.bs.domain.Parametro;
import pe.gob.foncodes.spp.bs.domain.Portafolio;
import pe.gob.foncodes.spp.bs.domain.PortafolioFocalizacion;

@Service("sppServices")
public class SppServices {

	@Autowired
	private ObjetivoServices objetivoServices;

	@Autowired
	private PortafolioServices portafolioServices;

	@Autowired
	private IndicadorServices indicadorServices;

	@Autowired
	private SubTipoProyectoServices subTipoProyectoServices;

	@Autowired
	private FocalizacionServices focalizacionServices;

	@Autowired
	private TipoProyectoServices tipoProyectoServices;

	@Autowired
	private ParametroServices parametroServices;

	@Autowired
	private MetaServices metaServices;

	@Autowired
	private MetaPeriodoServices metaPeriodoServices;

	@Autowired
	private EntidadServices entidadServices;

	@Autowired
	private PortafolioFocalizacionServices portafolioFocalizacionServices;

	public void guardarObjetivo(Objetivo objetivo) {
		this.objetivoServices.guardarObjetivo(objetivo);
	}

	public Objetivo actualizarObjetivo(Objetivo objetivo) {
		return this.objetivoServices.actualizarObjetivo(objetivo);
	}

	public Objetivo buscarObjetivoPorId(Serializable id) {
		return this.objetivoServices.buscarObjetivoPorId(id);
	}

	public List<Objetivo> buscarObjetivos() {
		return this.objetivoServices.buscarObjetivos();
	}

	public List<Objetivo> buscarObjetivosPorPortafolio(Long nIdPortafolio) {
		return this.objetivoServices
				.buscarObjetivosPorPortafolio(nIdPortafolio);
	}

	public List<Objetivo> buscarObjetivoPorIdoNOmbreOtipoObjetivo(
			Objetivo objetivo) {
		return this.objetivoServices
				.buscarObjetivoPorIdoNOmbreOtipoObjetivo(objetivo);
	}

	public List<Portafolio> buscarPortafolios() {

		return this.portafolioServices.buscarPortafolios();
	}

	public void guardarPortafolio(Portafolio portafolio) {
		this.portafolioServices.guardarPortafolio(portafolio);

	}

	public Portafolio actualizarPortafolio(Portafolio portafolio) {
		return this.portafolioServices.actualizarPortafolio(portafolio);
	}

	public List<Portafolio> buscarPortafolioPorIdONOmbreOTipoPortafolio(
			Portafolio portafolio) {
		return this.portafolioServices
				.buscarPortafolioPorIdONOmbreOTipoPortafolio(portafolio);
	}

	public void guardarIndicador(Indicador indicador) {
		this.indicadorServices.guardarIndicador(indicador);
	}

	public Indicador actualizarIndicador(Indicador indicador) {
		return this.indicadorServices.actualizarIndicador(indicador);
	}

	public Indicador buscarIndicadorPorId(Serializable id) {
		return this.indicadorServices.buscarIndicadorPorId(id);
	}

	public List<Indicador> buscarIndicadores() {
		return this.indicadorServices.buscarIndicadores();
	}

	public List<Indicador> buscarIndicadoresPorObjetivo(Long nIdObjetivo) {
		return this.indicadorServices.buscarIndicadoresPorObjetivo(nIdObjetivo);
	}
	
	public List<Indicador> buscarIndicadorPorIdONombreOIdObjetivo(Indicador indicador){
		return this.indicadorServices.buscarIndicadorPorIdONombreOIdObjetivo(indicador);
	}

	public List<Focalizacion> buscarFocalizacionPorAnhoZonalDepartamentoProvinciaDistrito(
			String codAnho, String codZonal, String codDepartamento,
			String codProvincia, String codDistrito) {
		return this.focalizacionServices
				.buscarFocalizacionPorAnhoZonalDepartamentoProvinciaDistrito(
						codAnho, codZonal, codDepartamento, codProvincia,
						codDistrito);
	}

	public List<SubTipoProyecto> buscarSubTipoProyectoByNidTipoProyectoActivos(
			Long tipoPortafolio) {
		return this.subTipoProyectoServices
				.buscarSubTipoProyectoByNidTipoProyectoActivos(tipoPortafolio);
	}

	public List<TipoProyecto> buscarTipoProyectoPorEstadoActivo() {
		return this.tipoProyectoServices.buscarTipoProyectoPorEstadoActivo();
	}

	public Portafolio buscarPortafolioPorId(Serializable id) {
		return this.portafolioServices.buscarPortafolioPorId(id);
	}

	public List<Parametro> buscarTipoObjetivo() {
		return this.parametroServices.buscarTiposObjetivos();
	}

	public List<Parametro> buscarEstadosGeneralesActivoNoActivo() {
		return this.parametroServices.buscarEstadosGeneralesActivoNoActivo();
	}

	public List<Parametro> buscarEstadosPortafolioActivos() {
		return this.parametroServices.buscarEstadosPortafolioActivos();
	}

	public List<Parametro> buscarModalidadEjecucionPortafolioActivos() {
		return this.parametroServices
				.buscarModalidadEjecucionPortafolioActivos();
	}

	public List<Parametro> buscarIndicadorTipos() {
		return this.parametroServices.buscarIndicadorTipos();

	}

	public Long buscarMaximoIdPortafolio() {
		return this.portafolioServices.buscarMaximoIdPortafolio();

	}

	public Parametro buscarObjetivoPrecedentePorTipoObjetivo(String tipObjetivo) {
		return this.parametroServices
				.buscarObjetivoPrecedentePorTipoObjetivo(tipObjetivo);
	}

	public List<Parametro> buscarIndicadorPeriodo() {
		return this.parametroServices.buscarIndicadorPeriodo();
	}

	public void guardarMeta(Meta meta) {
		this.metaServices.guardarMeta(meta);
	}

	public List<Meta> buscarMetasPorIndicador(Long nIdIndicador) {
		return this.metaServices.buscarMetasPorIndicador(nIdIndicador);
	}

	public void guardarMetaPeriodo(MetaPeriodo metaPeriodo) {
		this.metaPeriodoServices.guardarMetaPeriodo(metaPeriodo);
	}

	public List<Entidad> buscarZonalesFocalizalas(String anho) {
		return this.entidadServices.buscarZonalesFocalizalas(anho);
	}

	public List<Entidad> buscarDepartamentosPorZonalesFocalizalas(String anho,
			String codigoZonal) {
		return this.entidadServices.buscarDepartamentosPorZonalesFocalizalas(
				anho, codigoZonal);
	}

	public List<Entidad> buscarProvinciaPorDepartamentosAndZonalesFocalizalas(
			String anho, String codigoZonal, String codigoDepartamento) {
		return this.entidadServices
				.buscarProvinciaPorDepartamentosAndZonalesFocalizalas(anho,
						codigoZonal, codigoDepartamento);
	}

	public List<Entidad> buscarDistritoPorProvinciaPorDepartamentosAndZonalesFocalizalas(
			String anho, String codigoZonal, String codigoDepartamento,
			String codigoProvincia) {
		return this.entidadServices
				.buscarDistritoPorProvinciaPorDepartamentosAndZonalesFocalizalas(
						anho, codigoZonal, codigoDepartamento, codigoProvincia);
	}

	public void guardarPortafolioFocalizacion(
			PortafolioFocalizacion portafolioFocalizacion) {
		this.portafolioFocalizacionServices
				.guardarPortafolioFocalizacion(portafolioFocalizacion);

	}

	public void actualizarPortafolioFocalizacion(
			PortafolioFocalizacion portafolioFocalizacion) {
		this.portafolioFocalizacionServices
				.actualizarPortafolioFocalizacion(portafolioFocalizacion);

	}

	public List<PortafolioFocalizacion> buscarPortafolioFocalizacionPorAnhoZonalDepartamentoProvinciaDistrito(
			String codAnho, String codZonal, String codDepartamento,
			String codProvincia, String codDistrito) {
		return this.portafolioFocalizacionServices
				.buscarPortafolioFocalizacionPorAnhoZonalDepartamentoProvinciaDistrito(
						codAnho, codZonal, codDepartamento, codProvincia,
						codDistrito);
	}
}
